package so.sao.shop.supplier.dao;

import org.apache.ibatis.annotations.Param;
import so.sao.shop.supplier.domain.PurchaseItem;
import so.sao.shop.supplier.pojo.vo.*;
import so.sao.shop.supplier.pojo.vo.AccountPurchaseItemVo;

import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 订单信息  dao 接口
 * </p>
 *
 * @author 透云-中软-西安项目组
 * @since 2017-07-19
 */
public interface PurchaseItemDao {
    /**
     * 保存订单信息
     * @param listItem 订单列表详情对象
     * @return
     */
     int savePurchaseItem(List<PurchaseItem> listItem) throws Exception;

    /**
     * 根据订单ID获取订单详情
     *
     * @param orderId 订单ID
     * @return List<PurchaseItemVo>
     */
    List<PurchaseItemVo> getOrderDetailByOId(String orderId);

    /**
     * 根据订单编号查找所有相关订单详情
     * @param orderId 订单编号
     * @return 查询到的相关记录
     */
    List<AccountPurchaseItemVo> findPage(String orderId);

    /**
     * 根据订单编号查询订单对应的所有商品条目
     * @param orderId 订单编号
     * @return 商品条目封装的vo类的集合
     */
    List<PurchaseItemPrintVo> findPrintItems(String orderId);

    /**
     * 根据合并订单号查询订单详情列表
     *
     * @param payId
     * @return
     */
    List<PurchaseItemVo> getOrderDetailByPayId(@Param("payId") String payId);

    /**
     * 金蝶_获取所有订单详情
     * @param oidList
     * @return List<PurchaseItem>
     */
    List<PurchaseItem> getOrderList(@Param("oidList") List<String> oidList);

    /**
     * 根据退/换货单号查询订单详情
     *
     * @param returnNum 退/换货单号
     * @return PurchaseItemVo
     */
    PurchaseItemVo getOrderDetailByReturnNum(@Param("returnNum") String returnNum);

    /**
     * 更新SKU子订单的状态
     *
     * @param map 封装了入参
     */
    void updateSKUOrder(@Param("map") Map<String,Object> map);

    /**
     * 正单退款更新SKU子订单的退款金额
     * @param map 封装了入参
     */
    void updateSKUOrderRefundMoney(@Param("refundMoneyMap") Map<String,Object> map);

    /**
     * 根据订单ID获取拒收订单详情
     *
     * @param orderId 订单ID
     * @return List<RefusePurchaseItemVo>
     */
    List<RefusePurchaseItemVo> getRefuseOrderDetailByOId(String orderId);
    /**
     * 根据订单ID集合获取订单详情集合
     *
     * @param orderIds 订单ID集合
     * @param status 状态
     * @param type 类型
     * @return List<PurchaseItemVo>
     */
    List<PurchaseItemVo> getOrderDetailByOIds(@Param("orderIds") List<String> orderIds,
                                              @Param("status") Integer status,
                                              @Param("type") Integer type);

	/**
     * 根据详情ID获取退/换货单号
     *
     * @param detailIds
     * @return
     */
    List<String> getReturnNumByDetailIds(@Param("detailIds") List<BigInteger> detailIds, @Param("nowTime") Date nowTime);

    /**
     * 更改详情状态
     * @param detailIds 详情ID集合
     * @param status 状态
     */
    void updateOrderItemStatus(@Param("detailIds") List<BigInteger> detailIds,@Param("status") Integer status);
	/**
     * 根据orderId查询子订单的退款信息
     * @param orderId
     * @return
     */
    List<PurchaseItem> getReturnInfoByOrderId(@Param("orderId") String orderId);

    /**
     * 根据子订单状态查找子订单记录
     * @param status
     * @return
     */
    List<PurchaseItem> getOrderDetailsByStatus(Integer status);

    /**
     * 根据子订单编号集合及子订单状态批量修改子订单记录
     * @param detailsIds
     * @param status
     * @return
     */
    int updateOrderDetailsStatus(@Param("detailsIds") List<String> detailsIds,@Param("status") Integer status);
}